#include <stdlib.h>
#include <stdio.h>
#include <mcrypt.h>
#include <mhash.h>
#include <string.h> 

/* Initialise seulement le module */
int init_module(MCRYPT *td, char *algo, char *mode);

/* Initialise la structure MCRYPT passé en paramètre et génère une clef */
/* Fonction à appeler obligatoirement avant de crypter ou décrypter */
int init_crypt_module(MCRYPT *td, char *algo, char *mode, char** key, char* password, char** iv);

/* Génération du clé aléatoire à partir du password */
/* Le résultat est stocké dans key                  */
void key_generator(char* key, int keysize, char* password);

/* Crypte le plaintext en fonction de l'algo et du mode contenu */
/* dans la structure MCRYPT                                     */
char* crypt_block(MCRYPT* td, char * plaintext, int* tailleCrypt);

/* Décrypte le cyphertext en fonction de l'algo et du mode contenu */
/* dans la structure MCRYPT                                     */
char* decrypt_block(MCRYPT* td, char * cyphertext, int tailleCypher);

/* Calcul un hash du "content" */
unsigned char* hash(hashid type, char* content, int* size);

/* Libère l'espace alloué */
void close_module(MCRYPT* td);

/* Affiche le hash */
void afficheHash(int mode,unsigned char * hash);
